export function createIFlyTekWebSocket(callback) {
  return new Promise((resolve, reject) => {
    const params = getHandShakeParams()
    const url = `${IFlyTekConfig.HOST}?authorization=${params.authorization}&date=${params.date}&host=${params.host}`
    
    // 使用更兼容的写法
    const socketTask = uni.connectSocket({
      url: url,
      success: (res) => {
        console.log('Socket连接创建成功', res)
        
        // 微信小程序基础库2.7.0+返回的是SocketTask对象
        if (socketTask && typeof socketTask.onOpen === 'function') {
          setupSocketListeners(socketTask, callback, resolve, reject)
        } 
        // 旧版本处理方式
        else {
          const realSocketTask = res.socketTask || res.tasks?.[0]
          if (realSocketTask) {
            setupSocketListeners(realSocketTask, callback, resolve, reject)
          } else {
            reject(new Error('无法获取有效的SocketTask对象'))
          }
        }
      },
      fail: (err) => {
        console.error('Socket连接创建失败', err)
        reject(err)
      }
    })
  })
}

// 公共监听设置函数
function setupSocketListeners(socketTask, callback, resolve, reject) {
  // 监听打开事件
  socketTask.onOpen(() => {
    console.log('WebSocket连接已打开')
    
    const initParams = {
      common: { app_id: IFlyTekConfig.APPID },
      business: {
        language: 'zh_cn',
        domain: 'iat',
        accent: 'mandarin'
      },
      data: {
        status: 0,
        format: 'audio/L16;rate=16000',
        encoding: 'raw'
      }
    }
    
    socketTask.send({
      data: JSON.stringify(initParams),
      success: () => {
        console.log('初始化参数发送成功')
        resolve(socketTask)
      },
      fail: (err) => {
        console.error('初始化参数发送失败:', err)
        reject(err)
      }
    })
  })
  
  // 监听消息
  socketTask.onMessage((res) => {
    try {
      const data = JSON.parse(res.data)
      if (data.code !== 0) {
        console.error('识别错误:', data)
        return
      }
      const result = data.data?.result || {}
      const text = result.ws?.map(item => 
        item.cw?.map(c => c.w).join('')
      ).join('') || ''
      callback(text, data.data?.status === 2)
    } catch (e) {
      console.error('消息解析错误:', e)
    }
  })
  
  // 错误处理
  socketTask.onError((err) => {
    console.error('WebSocket错误:', err)
    reject(err)
  })
  
  // 关闭处理
  socketTask.onClose(() => {
    console.log('WebSocket连接关闭')
  })
}